/***************************************************
* @版权：哈尔滨工业大学自动化测试与控制研究所
* @文件名：HITATCI_PCM.h
* @作者：Liu Yanku
* @版本：V1.0
* @时间：2023-4-13
* @功能描述：接收产品PCM码流数据
* @修改日志：
***************************************************/

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "visa.h"

/*预处理块*/
#ifndef __HITATCI_PXIe_HEADER__
#define __HITATCI_PXIe_HEADER__
#if defined(__cplusplus) || defined(__cplusplus__)
extern "C" {
#endif

/* 
 * @函数名：	HITATCI_PXIe_init
 * @描述：		初始化PXIe模块，获取仪器句柄
 * @输入参数1：	ResourceName		-	仪器的逻辑地址
 * @输入参数2：	IdQuery  	 		-	TRUE：进行仪器识别
										FALSE：不进行仪器识别
 * @输入参数3：	Reset 				-	TRUE：复位仪器
										FALSE：不复位仪器
 * @输出参数1：	viPCM				-	仪器句柄
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC HITATCI_PXIe_init (ViRsrc ResourceName, ViBoolean IdQuery, ViBoolean Reset, ViSession *viPCM);

/*
 * @函数名：	HITATCI_PXIe_Close
 * @描述：		关闭PXIe模块，释放仪器句柄
 * @输入参数1：	vi			-	仪器句柄
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC HITATCI_PXIe_Close (ViSession vi);

/*
 * @函数名：	HITATCI_PXIe_viIn32_dma
 * @描述：		从FPGA读取数据
 * @输入参数1：     vi：句柄
 * @输入参数2：     vendor_id：返回设备的厂商ID
 * @输入参数3：     pci_device_id：返回设备的设备ID
 * @输入参数4：     pci_slot_id：返回设备的slot号
 * @输入参数5：     pci_bus_id：返回设备的总线号
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC  HITATCI_PXIe_viDevmsg (ViSession vi, ViPUInt16 vendor_id, ViPUInt16 pci_device_id, ViPUInt16 pci_slot_id, ViPUInt16 pci_bus_id);

/*
 * @函数名：	HITATCI_PXIe_viIn32
 * @描述：		从FPGA的寄存器空间读取32位值
 * @输入参数1：     vi：句柄
 * @输入参数2：     space：bar空间，0,1,2,3,4,5
 * @输入参数3：     offset：偏移量
 * @输入参数4：     val32：读取的值
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC  HITATCI_PXIe_viIn32 (ViSession vi, ViUInt16 space, ViBusAddress offset, ViPUInt32 val32);

/*
 * @函数名：	HITATCI_PXIe_viOut32
 * @描述：		向FPGA的寄存器空间写入32位值
 * @输入参数1：     vi：句柄
 * @输入参数2：     space：bar空间，0,1,2,3,4,5
 * @输入参数3：     offset：偏移量
 * @输入参数4：     val32：写入的值
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC  HITATCI_PXIe_viOut32 (ViSession vi, ViUInt16 space, ViBusAddress offset, ViUInt32  val32);

/*
 * @函数名：	HITATCI_PXIe_viIn32_dma
 * @描述：		从FPGA读取数据
 * @输入参数1：     vi：句柄
 * @输入参数2：     space：bar空间，0,1,2,3,4,5
 * @输入参数3：     offset：偏移量
 * @输入参数4：     val32：存储读取序列的值
 * @输入参数5：     val32_len：读取的个数
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC  HITATCI_PXIe_viIn32_dma (ViSession vi, ViUInt16 space, ViBusAddress offset, ViPUInt32 val32, ViUInt32 val32_len);

/*
 * @函数名：	HITATCI_PXIe_viOut32_dma
 * @描述：		向FPGA写入数据
 * @输入参数1：     vi：句柄
 * @输入参数2：     space：bar空间，0,1,2,3,4,5
 * @输入参数3：     offset：偏移量
 * @输入参数4：     val32：存储读取序列的值
 * @输入参数5：     val32_len：读取的个数
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC  HITATCI_PXIe_viOut32_dma (ViSession vi, ViUInt16 space, ViBusAddress offset, ViPUInt32  val32, ViUInt32 val32_len);

/*
 * @函数名：	HITATCI_PXIe_self_test
 * @描述：		pxie板卡自检功能
 * @输入参数1：	vi			-	仪器句柄
 * @返回值：	函数执行正确，返回值大于等于0；执行时产生错误，返回值小于0
*/
ViStatus _VI_FUNC HITATCI_PXIe_self_test (ViSession vi);

#if defined(__cplusplus) || defined(__cplusplus__)
}
#endif

#endif